package fr.efrei.musicpliz.entity;

import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;

import fr.efrei.musicpliz.enums.MessageStatus;

@Entity
@SuppressWarnings("serial")
public class Message extends AbstractEntity {

	@ManyToOne
	private Compte destinataire;
	@ManyToOne
	private Compte expediteur;
	@ManyToOne
	private Compte compte;
	private String objet;
	private String contenu;
	private Date dateCreation;
	private MessageStatus status;
	
	public Message(){
		// Empty constructor (for example for generic search)
	}
	
	public Message(String objet, Compte destinataire, Compte expediteur, String contenu) {
		this.dateCreation = new Date();
		this.destinataire = destinataire;
		this.expediteur = expediteur;
		this.contenu = contenu;
		this.objet = objet;
		this.status = MessageStatus.UNREAD;
	}
	
	public Compte getDestinataire() {
		return destinataire;
	}

	public void setDestinataire(Compte destinataire) {
		this.destinataire = destinataire;
	}

	public Compte getExpediteur() {
		return expediteur;
	}

	public void setExpediteur(Compte expediteur) {
		this.expediteur = expediteur;
	}
	
	public Compte getCompte() {
		return compte;
	}

	public void setCompte(Compte compte) {
		this.compte = compte;
	}

	@Lob
	public String getContenu() {
		return contenu;
	}

	public void setContenu(String contenu) {
		this.contenu = contenu;
	}
	
	public String getObjet() {
		return objet;
	}

	public void setObjet(String objet) {
		this.objet = objet;
	}

	public Date getDateCreation() {
		return dateCreation;
	}

	@Enumerated(EnumType.ORDINAL) 
	public MessageStatus getStatus() {
		return status;
	}

	public void setStatus(MessageStatus status) {
		this.status = status;
	}

	@Transient
	public String getCompteString() {
		return "Compte";
	}
	
	@Transient
	public boolean isUnread(){
		return status == MessageStatus.UNREAD;
	}
	
	@Transient
	public boolean isRead(){
		return status == MessageStatus.READ;
	}
	
	@Transient
	public boolean isReplied(){
		return status == MessageStatus.REPLIED;
	}
}
